#ifndef _VN_SPRITE_H_
#define _VN_SPRITE_H_

#include "..\Math\Vector2.h"
#include "..\Graphics\Rect.h"
#include "..\Graphics\Scale.h"
#include "..\Graphics\Color.h"

namespace vn
{
	class Sprite
	{
	public:
		Sprite(void) : m_visible(true){}
		virtual ~Sprite(void){}

		virtual void setTextureRect(int x, int y, int w, int h)			= 0;
		virtual void setTextureRect(const vn::IntRect& p_textureRect)	= 0;
		virtual void setAngle(float p_angle)							= 0;
		virtual void setScale(const vn::Scale& p_scale)					= 0;
		virtual void setScale(float x, float y)							= 0;
		virtual void setPosition(const vn::Vector2& p_position)			= 0;
		virtual void setPosition(float x, float y)						= 0;
		virtual void translate(const vn::Vector2& p_velocity)			= 0;
		virtual void translate(float x, float y)						= 0;
		virtual void setOrigin(const vn::Vector2& p_origin)				= 0;
		virtual void setOrigin(float x, float y)						= 0;
		virtual void setColor(const vn::Color& p_color)					= 0;
		virtual void setDoRender(bool p_value)							= 0;

		virtual const vn::Vector2 getPosition() const		= 0;
		virtual const vn::Scale getScale() const			= 0;
		virtual const float getAngle() const				= 0;
		virtual const vn::IntRect getTextureRect() const	= 0;
		virtual const vn::Vector2 getOrigin() const			= 0;
		virtual const vn::Color getColor() const			= 0;

		const bool isVisible() const				{ return m_visible; }
		void setVisible(bool p_value)				{ m_visible = p_value; }

	protected:
		bool m_visible;
	};
}

#endif // _VN_SPRITE_H_
